import axios from "axios"; //axios请求
import {
	baseUrl,
	def
} from '../config/env'; //公共域名
import qs from 'qs'; //引用qs
import router from '../router'

import {
	ElMessage,
	ElMessageBox
} from 'element-plus'

export function getToken() { //获得token
	return localStorage.getItem("token")
}

const service = axios.create({
	baseURL: baseUrl, // api的base_url
	timeout: 5000, // 请求超时时间
	method: def.reqMethod,
	headers: {
		'Content-Type': def.reqType == 'form' ? 'application/x-www-form-urlencoded' :
			'application/json;charset=utf-8'
	} //传参类型
});

service.interceptors.request.use(config => {
	// 在请求发送之前做些什么
	if (getToken()) {
		config.headers[def.tokenName] = getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
	}
	if (config.method == "post") { //qs使用
		// config.data = qs.stringify(config.data);
		config.data = JSON.stringify(config.data) || {};
		// console.log(config)
	}
	return config
}, error => {
	// 请求错误怎么办
	console.log(error) // for debug
	Promise.reject(error)
})


// respone拦截器
service.interceptors.response.use(

	response => {
		const res = response.data

		/**
		 * 下面的注释为通过response自定义code来标示请求状态，当code返回如下情况为权限有问题，登出并返回到登录页
		 * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
		 */

		if (res.code === 0) { //0正常
			return res
		} else if (res.code === 1001) { //1001登录过期
			ElMessageBox.confirm('当前未登录，或登录失效', '是否去登录？', {
				confirmButtonText: '去登录',
				cancelButtonText: '取消',
				type: 'warning'
			}).then(() => {
				router.push("/login")
			})
		} else { //其他报错
			ElMessage({
				message: res.msg,
				type: 'error'
			});
			return Promise.reject(new Error(res.msg || 'Error'))
		}

	},
	error => { //请求错误
		console.log('err' + error) // for debug
		return Promise.reject(error)
	})


export default service;